Java是物件導向語言(OOP, Object Oriented Programming),使用訊息傳遞機制(Message Passing),透過物件接收、處理、傳送訊息來實現功能。
Java具有三大特性:封裝、繼承、多型。接下來分三篇依序介紹。
封裝是將類別(class)設定存取限制,其事物的屬性、方法視需求隱藏起來,保留特定方法讓其他的類別引用。
主要能夠保留自訂的資訊隱私,避免被呼叫使用後,誤調其值造成方法誤用;而後續要修改方法時,也僅要處理該類別即可,不用修改外部呼叫此方法的內容。
Java的存取修飾子,依照可存取範圍,從高至低(最開放到最隱私保護)分別:
public,protected,default,private。
存取的範圍有類別Class、套件Package、或子類別Subclass。
public int number = 100;
//代表所有類別、所有套件、所有人都能存取此資料。
protected void protectedMethod() {
System.out.println("Protected Method");
}
class DefaultClass {
int defaultField;
void defaultMethod() {
System.out.println("Default Method");
}
}
private int privateField;
物件導向著重在REUSE,因此,個人設計的程式使用封裝處理,不要讓他人直接使用,比較可以保護程式的使用結果。
實體變數可以設定為private,再透過public getXXX 、public setXXX處理。
※若只提供get而不設定set,代表只供讀取,不供寫入作用。
public class Person {
private String name; //名字與年紀都設為私有
private int age;
public Person(String name, int age){
this.name = name;
this.age = age;
}
public String getName(){ //需要返回name屬性給呼叫者
return name;
}
public void setName(String name){ // 不用返回值給呼叫者故使用void
this.name = name;
}
public int getAge(){
return age;
}
}
=========================================
class Test {
public static void main(String[] args){
Person p1 = new Person("Alex", 30);
System.out.println(p1.getName()); //印出Alex
System.out.println(p1.getAge()); //印出30
p1.setName("Eva");
// p1.setAge("15"); //報錯,無此方法
System.out.println(p1.getName()); //印出Eva
System.out.println(p1.getAge()); //印出30
}
}